{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/home/husein/t5/prepare/mesolitica-tpu.json'\n",
    "os.environ['CUDA_VISIBLE_DEVICES'] = ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from pegasus import transformer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "vocab_size = 32128\n",
    "hidden_size = 512\n",
    "filter_size = 3072\n",
    "num_encoder_layers = 6\n",
    "num_decoder_layers = 6\n",
    "num_heads = 8\n",
    "label_smoothing = 0.0\n",
    "dropout = 0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/attention.py:46: The name tf.layers.Dense is deprecated. Please use tf.compat.v1.layers.Dense instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = transformer.TransformerEncoderDecoderModel(vocab_size, hidden_size,\n",
    "                                                   filter_size, num_heads,\n",
    "                                                   num_encoder_layers,\n",
    "                                                   num_decoder_layers,\n",
    "                                                   label_smoothing, dropout)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/embedding.py:61: The name tf.variable_scope is deprecated. Please use tf.compat.v1.variable_scope instead.\n",
      "\n",
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/embedding.py:61: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.\n",
      "\n",
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/embedding.py:65: The name tf.get_variable is deprecated. Please use tf.compat.v1.get_variable instead.\n",
      "\n",
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/embedding.py:69: calling RandomNormal.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Call initializer instance with the dtype argument instead of passing it to the constructor\n",
      "WARNING:tensorflow:From /home/husein/malaya/Malaya/pretrained-model/pegasus/pegasus/layers/attention.py:131: The name tf.matrix_band_part is deprecated. Please use tf.linalg.band_part instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "X = tf.placeholder(tf.int64, (None, None))\n",
    "top_p = tf.placeholder(tf.float32, None)\n",
    "outputs = model.predict(\n",
    "  {\n",
    "      \"inputs\": X,\n",
    "  }, tf.shape(X)[1], 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sentencepiece as spm\n",
    "\n",
    "vocab = '/home/husein/b2b/sp10m.cased.t5.model'\n",
    "sp = spm.SentencePieceProcessor()\n",
    "sp.Load(vocab)\n",
    "\n",
    "class Encoder:\n",
    "    def __init__(self, sp):\n",
    "        self.sp = sp\n",
    "        self.vocab_size = sp.GetPieceSize() + 100\n",
    "    \n",
    "    def encode(self, s):\n",
    "        return self.sp.EncodeAsIds(s)\n",
    "    \n",
    "    def decode(self, ids, strip_extraneous=False):\n",
    "        return self.sp.DecodeIds(list(ids))\n",
    "    \n",
    "encoder = Encoder(sp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'gs://mesolitica-tpu-general/pegasus-small-multitasks/model.ckpt-550000'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import os\n",
    "\n",
    "# ckpt_path = 'base/model.ckpt-300000'\n",
    "ckpt_path = tf.train.latest_checkpoint('gs://mesolitica-tpu-general/pegasus-small-multitasks')\n",
    "ckpt_path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "sess = tf.InteractiveSession()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from gs://mesolitica-tpu-general/pegasus-small-multitasks/model.ckpt-550000\n"
     ]
    }
   ],
   "source": [
    "var_lists = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)\n",
    "saver = tf.train.Saver(var_list = var_lists)\n",
    "saver.restore(sess, ckpt_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "from unidecode import unidecode\n",
    "\n",
    "def cleaning(string):\n",
    "    return re.sub(r'[ ]+', ' ', unidecode(string)).strip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "string = \"\"\"\n",
    "SHAH ALAM - Langkah Tun Dr Mahathir Mohamad yang mahu menubuhkan parti baharu sekali lagi dilihat akan memecahbelahkan orang Melayu, kata bekas pegawai khas Datuk Seri Najib Tun Razak, Isham Jalil.\n",
    "\n",
    "Dakwa beliau, orang Melayu akan menjadi semakin lemah akibat tindakan bekas Perdana Menteri itu.\n",
    "\n",
    "\"Lebih dua puluh tahun dahulu, Dr Mahathir telah memecahbelahkan orang-orang Melayu dengan penubuhan Parti Keadilan Rakyat (PKR) oleh Datuk Seri Anwar Ibrahim akibat pergaduhan Dr Mahathir dengan beliau.\n",
    "\n",
    "\"Lima tahun lalu juga, Dr Mahathir telah memecahbelahkan orang-orang Melayu melalui penubuhan Bersatu untuk menjatuhkan Najib kerana tidak membantu Mukhriz dalam pemilihan UMNO serta tidak membantu kroni-kroni beliau untuk menyambung kontrak dan konsesi kerajaan yang diperoleh selama berpuluh tahun sebelum itu.\n",
    "\n",
    "\"Ini tidak akan berhenti sehinggalah Mukhriz menjadi Perdana Menteri dan kepentingan peribadi serta kroni-kroninya dipenuhi,\" katanya dalam satu kenyataan hari ini.\n",
    "\n",
    "Justeru katanya, Ahli Parlimen Langkawi itu layak dilabelkan sebagai 'Bapa Pemecahbelah Orang-orang Melayu'.\n",
    "\n",
    "\"Parti baharu Dr Mahathir ini dikhabarkan yang terdiri daripada serpihan ahli-ahli Bersatu dalam kalangan orang-orang Melayu.\n",
    "\n",
    "\"Sebab jika ada banyak parti Melayu, orang-orang Melayu berkemungkinan besar akan lebih bertelagah dan berpecah belah,\" katanya.\n",
    "\n",
    "Isham yang juga Ketua Penerangan Barisan Nasional (BN) Selangor berkata, musuh Melayu dan DAP kini paling beruntung dan bersorak dengan tindakan Dr Mahathir ini.\n",
    "\n",
    "\"Jika masih ada lagi orang-orang Melayu yang masih tidak sedar dan masih mengikut Dr Mahathir, saya tidak tahu nak kata apa.\n",
    "\n",
    "\"Kepada Dr Mahathir dan pengikut-pengikutnya ini, daripada mereka menjadi musuh dalam selimut untuk orang-orang Melayu, mungkin lebih baik mereka terus masuk DAP secara terang-terangan seperti segelintir Melayu DAP yang lain.\n",
    "\n",
    "\"Dengan ini mereka tidak perlu menyorok atau berselindung lagi tentang perjuangan sebenar mereka,\" katanya.\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "string1 = \"\"\"\n",
    "KUALA LUMPUR: Dakwaan Datuk Seri Anwar Ibrahim semalam, bahawa beliau mendapat sokongan 'kukuh dan meyakinkan' untuk mengambil alih tampuk pemerintahan, menimbulkan pelbagai persoalan sejauh manakah beliau mampu menggugat kerajaan Perikatan Nasional (PN).\n",
    "\n",
    "Kerajaan PN akan terus memerintah selagi Presiden Parti Keadilan Rakyat (PKR) itu dapat membuktikan kepada Yang di-Pertuan Agong dan Dewan Rakyat yang beliau benar-benar mempunyai angka keramat untuk mengambil alih tampuk pemerintahan kerajaan PN.\n",
    "\n",
    "Bagi pakar geostrategi. Azmi Hassan, walau apapun percaturan Anwar, kata putus akhir mengenai sebarang perubahan pada tampuk pemerintahan bukan terletak di tangan beliau tetapi di tangan Yang di-Pertuan Agong Al-Sultan Abdullah Ri'ayatuddin Al-Mustafa Billah Shah.\n",
    "\n",
    "Beliau berkata Agong boleh memutuskan peralihan kuasa dilakukan tanpa pembubaran Parlimen atau pilihan raya umum jika Parlimen dibubarkan.\n",
    "\n",
    "\"Memang benar jawatan Perdana Menteri adalah bergantung kepada sokongan yang diperoleh melalui Dewan Rakyat. Jika benar dakwaan yang beliau telah mendapat sokongan majoriti, ini bermakna Perdana Menteri, Tan Sri Muhyiddin Yassin sudah kehilangan sokongan Ahli Dewan Rakyat,\" katanya.\n",
    "\n",
    "Mengenai desas-desus bahawa Anwar mempunyai sokongan Ahli Parlimen UMNO, Azmi berkata beliau tidak pasti tentang perkara itu memandangkan ia akan menimbulkan kekecewaan akar umbi UMNO kerana mana mungkin parti itu boleh bekerjasama dengan DAP yang selama ini dianggap seteru.\n",
    "\n",
    "\"Perlu diingat mengapa Ahli Parlimen UMNO sokong Muhyiddin adalah untuk mengelak DAP dalam kerajaan.\n",
    "\n",
    "\"Oleh kerana DAP sudah menyatakan sokongan kepada Anwar, maka agak pasti DAP akan turut serta dalam kerajaan Anwar. Ini sudah tentu menyukarkan penerimaan akar umbi UMNO terhadap keputusan Ahli Parlimen UMNO sokong Anwar,\" katanya.\n",
    "\n",
    "Presiden UMNO, Datuk Seri Dr Ahmad Zahid Hamidi dalam kenyataan semalam, mengesahkan menerima maklumat terdapat ramai ahli Parlimen UMNO dan Barisan Nasional (BN) menyatakan sokongan terhadap Anwar dan beliau menghormati pendirian mereka itu.\n",
    "\n",
    "Sementara itu, Timbalan Pengarah Institut Kajian Etnik (KITA) Universiti Kebangsaan Malaysia (UKM), Profesor Madya Dr Kartini Aboo Talib berkata, masyarakat secara umumnya tidak boleh menerima bulat-bulat dakwaan Anwar mendapat sokongan membentuk kerajaan baharu.\n",
    "\n",
    "Ini kerana dakwaan itu perlu dibuktikan terlebih dahulu dengan melihat kepada akuan bersumpah (SD) yang ditandatangani barisan Ahli Parlimen.\n",
    "\n",
    "\"Pada saya apabila Anwar mengatakan telah mendapat sokongan majoriti, itu hanyalah kata-kata. Perlu dibuktikan dengan beberapa cara termasuk melihat kepada SD atau pengumuman secara jelas daripada Ahli Parlimen. Jadi, kita tidak perlu menerima bulat-bulat kenyataan beliau lagi,\" katanya.\n",
    "\n",
    "Bagaimanapun, beliau mengakui pengumuman dibuat Anwar itu mampu mempengaruhi proses Pilihan Raya Negeri Sabah Sabtu ini memandangkan pengundi di negeri itu perlu memilih gabungan yang disenangi kerajaan Persekutuan demi masa depan Sabah.\n",
    "\n",
    "\"Hubungan antara Persekutuan dan negeri memberi impak besar dalam pembangunan di Sabah selain melihat bagaimana keakuran Persekutuan berhubung Perjanjian Malaysia 1963 (MA63),\" katanya.\n",
    "\n",
    "Sementara itu, belum ada pihak dalam PN yang menyatakan sokongan kepada Anwar. - BERNAMA\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Tun Dr Mahathir mahu menubuhkan parti baharu'"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded = encoder.encode(f'tajuk: {cleaning(string)}') + [1]\n",
    "f = sess.run(outputs, feed_dict = {X: [encoded], top_p: 0.8})\n",
    "encoder.decode(f['outputs'][0].tolist())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Dakwaan Datuk Seri Anwar Ibrahim'"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded = encoder.encode(f'tajuk: {cleaning(string1)}') + [1]\n",
    "f = sess.run(outputs, feed_dict = {X: [encoded]})\n",
    "encoder.decode(f['outputs'][0].tolist())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
